package com.ssyt.yt1.day21;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Scanner;

/**
 * 字符输入流：Reader
 * 
 * @author Administrator
 *
 */
public class ReaderDemo {

	/**
	 * 效率较低，会频繁的向硬盘读取
	 * 
	 * @throws IOException
	 */
	@Deprecated
	public static void test1() throws IOException {
		// 1）使用File类打开一个文件
		File file = new File("d:/hello.txt");
		if (!file.exists()) {
			file.createNewFile();
		}
		// 2）通过字节流或字符流的子类，指定输出的位置
		Reader reader = null;
		try {
			reader = new FileReader(file);
			// 3）进行读/写操作
			char[] chars = new char[2];
			int len = 0;
			while ((len = reader.read(chars)) != -1) {
				System.out.println(new String(chars, 0, len));
			}
		} finally {
			// 4）关闭输入/输出
			// 注：IO操作属于资源操作，对于资源操作，最后必须关闭。
			if (reader != null) {
				reader.close();
			}
		}
	}

	/**
	 * 效率较高，更好的利用了缓冲区，可直接读取一行文本！
	 * 
	 * @throws IOException
	 */
	public static void test2() throws IOException {
		// 1）使用File类打开一个文件
		File file = new File("d:/hello.txt");
		if (!file.exists()) {
			file.createNewFile();
		}
		// 2）通过字节流或字符流的子类，指定输出的位置
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new FileReader(file));
			// 3）进行读/写操作
			StringBuilder sb = new StringBuilder();
			String line = null;
			while ((line = reader.readLine()) != null) {
				sb.append(line);
			}
			System.out.println(sb);
		} finally {
			// 4）关闭输入/输出
			// 注：IO操作属于资源操作，对于资源操作，最后必须关闭。
			if (reader != null) {
				reader.close();
			}
		}
	}

	/**
	 * 使用JDK1.5提出的Scanner读取文本
	 * 
	 * @throws IOException
	 */
	public static void test3() throws IOException {
		Scanner scanner = null;
		try {
			scanner = new Scanner(new File("d:/hello.txt"));
			while (scanner.hasNext()) {
				System.out.println(scanner.nextLine());
			}
		} finally {
			if (scanner != null) {
				scanner.close();
			}
		}
	}

	public static void main(String[] args) throws IOException {
		// test1();
		// test2();
		test3();
	}
}
